import Vue from 'vue';
import Vuex from 'vuex';
import { setItem, getItem } from '../utils/storage';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    // 保存公共数据，token
    // refresh_token和token
    // 设置vuex中的初值是，先从本地存储取，没有则为空,
    // 这样的话无论如何刷新state里都有值了，实现了token的持久化
    tokenInfo: getItem('tokenInfo') || {},
    photo: getItem('photo') || '' // 用户头像url地址
  },
  mutations: {
    mSetPhoto (state, newPhotoUrl) {
      state.photo = newPhotoUrl;
      // 持久化
      // JSON.Stringifgy,JSON.Parse对纯字符串也有效
      setItem('photo', state.photo);
    },
    // 设置tokenInfo
    mSetToken (state, tokenObj) {
      state.tokenInfo = tokenObj;

      // Vuex 容器中的数据只是为了方便在其他任何地方能方便的获取登录状态数据，但是页面刷新还是会丢失数据状态，
      // 所以我们还要把数据进行持久化中以防止页面刷新丢失状态的问题。
      // 把token信息做持久化,调用storage.js中的方法
      setItem('tokenInfo', tokenObj);
    },
    // 只更新token，不更新refresh_token
    mUpdateToken (state, newToken) {
      console.log('mUpdateToken更新token啦');

      // 收到更新token的通知
      state.tokenInfo.token = newToken;
      // 持久化
      setItem('tokenInfo', state.tokenInfo);
    },
    // 清空token
    mClearToken (state) {
      state.tokenInfo = {};
      setItem('tokenInfo', state.tokenInfo);
    }
  },
  actions: {
  },
  modules: {
  }
});
